home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / defoma / libhint-cmap.pl < prev    next >
Text File  |  2006-06-17  |  3KB  |  101 lines

  1. sub sethint_cmap {
  2.     my $font = shift;
  3.     my $line;
  4.     my $flag = 0;
  5.     my $cmapname = '';
  6.     my $cidregistry = '';
  7.     my $cidordering = '';
  8.     my $cidsupplement = '';
  9.     
  10.  
  11.     my $fontfilename = $font;
  12.     $fontfilename =~ s/.*\/(.*)/$1/;
  13.     
  14.     open(F, $font) || exitfunc(1, "$font: Unable to open.");
  15.     
  16.     while (<F>) {
  17.     $line = $_;
  18.     chomp($line);
  19.     if ($line =~ /\/CMapName[ \t]/) {
  20.         $cmapname = $line;
  21.         $cmapname =~ s/.*\/CMapName[ \t]+\/([^ \t]+).*/$1/;
  22.     } elsif ($line =~ /\/CIDSystemInfo[ \t]/) {
  23.         $flag = 1;
  24.     } elsif ($flag == 1 && $line =~ /end[ \t]+def/) {
  25.         $flag = 0;
  26.     } elsif ($flag == 1 && $line =~ /\/Registry[ \t]/) {
  27.         $cidregistry = $line;
  28.         $cidregistry =~ s/.*\/Registry[ \t]+\((.*)\).*/$1/;
  29.     } elsif ($flag == 1 && $line =~ /\/Ordering[ \t]/) {
  30.         $cidordering = $line;
  31.         $cidordering =~ s/.*\/Ordering[ \t]+\((.*)\).*/$1/;
  32.     } elsif ($flag == 1 && $line =~ /\/Supplement[ \t]/) {
  33.         $cidsupplement = $line;
  34.         $cidsupplement =~ s/.*\/Supplement[ \t]+(.).*/$1/;
  35.     }
  36.     if ($cmapname ne '' && $cidordering ne '' && $cidregistry ne '' &&
  37.         $cidsupplement ne '') {
  38.         last;
  39.     }
  40.     }
  41.  
  42.     close F;
  43.  
  44.     if ($cmapname eq '' || $cidordering eq '' || $cidregistry eq '' ||
  45.     $cidsupplement eq '') {
  46.     exitfunc(1, "Some information aren't found in $fontfilename.\nAborting..");
  47.     }
  48.  
  49.     my $charset = '';
  50.     my $encoding = '';
  51.     
  52.     if (open(F, "$DEFOMA_TEST_DIR/etc/defoma/ps-cset-enc.data")) {
  53.     while (<F>) {
  54.         $line = $_;
  55.         chomp($line);
  56.  
  57.         next if ($line =~ /^\#/);
  58.  
  59.         my @list = split(' ', $line);
  60.         next if (@list < 3);
  61.  
  62.         $list[0] =~ s/\*/\.\*/g;
  63.         $list[0] =~ s/\?/\./g;
  64.  
  65.         $list[1] =~ s/\*/\.\*/g;
  66.         $list[1] =~ s/\?/\./g;
  67.  
  68.         if ("$cidregistry-$cidordering-$cidsupplement" =~ /^($list[0])$/) {
  69.         if ($cmapname =~ /^($list[1])$/) {
  70.             if ($list[2] ne 'ignore') {
  71.             $charset = $list[2];
  72.             $charset =~ s/,/ /g;
  73.             $encoding = $list[3] if (@list >= 4);
  74.             }
  75.             last;
  76.         }
  77.         }
  78.     }
  79.  
  80.     close F;
  81.     }
  82.  
  83.     my $hints = "--CMapName $cmapname";
  84.     $hints .= " --CIDRegistry $cidregistry";
  85.     $hints .= " --CIDOrdering $cidordering";
  86.     $hints .= " --CIDSupplement $cidsupplement";
  87.  
  88.     $hints .= " --Charset $charset" if ($charset =~ /\S/);
  89.     $hints .= " --Encoding $encoding" if ($encoding =~ /\S/);
  90.  
  91.     $hints .= " --Direction Horizontal"
  92.     if ($cmapname =~ /\-H$/ || $cmapname eq 'H');
  93.     $hints .= " --Direction Vertical"
  94.     if ($cmapname =~ /\-V$/ || $cmapname eq 'V');
  95.  
  96.     return $hints;
  97. }
  98.  
  99. 1;
  100.  
  101.